//
// Created by user on 20-5-5.
//

#ifndef _TIMER_H_
#define _TIMER_H_

#include "../../GeneralLibrary/Printf.h"
#include "../../GeneralLibrary/Lib.h"
#include "../../MemoryManagement/Malloc.h"
#include "../SoftIRQ.h"

/********************* 结构体重命名区 *********************/
typedef struct TimerStruct Timer;

/********************* 结构体定义区 *********************/

/**
 * 定时器列表
 */
struct TimerStruct {
    List list;                      // 双向链表
    unsigned long expireJiffies;    // 到期时间

    void (*func)(void *data);       // 处理函数

    void *data;                     // 参数
};

/********************* 外部变量声明区 *********************/

extern unsigned long volatile jiffies;

// 定时功能队列头
//extern Timer timerListHead;

/********************* 函数声明区 *********************/

/**
 * 初始化定时器
 */
void timerInit();

/**
 * 定时器处理函数
 * @param data
 */
void doTimer(void *data);

void testTimer(void *data);

/**
 * 初始化定时功能
 * @param timerList 定时功能
 * @param func 处理函数
 * @param data 参数
 * @param expireJiffies 到期时间
 */
void initTimerList(Timer *timer, void (*func)(void *data), void *data, unsigned long expireJiffies);

/**
 * 添加定时功能到定时功能队列
 * @param timerList 定时功能
 */
void addTimerList(Timer *timer);

/**
 * 从定时功能队列删除指定的定时功能
 * @param timerList 定时功能
 */
void delTimerList(Timer *timer);

#endif //_TIMER_H_
